Software impacts nearly every facet of modern society, from communications and entertainment to business productivity and governmental efficiency. To accommodate all of these demands, new software is continually written, and it is written at an ever increasing rate. To ensure software provides its intended functionality, each new piece of software is tested.
To be useful, software usually accepts input of some kind and produces an output in response. As software has become more complex and interdependent, it has become difficult if not impossible to verify software merely by reviewing the lines of code. Hence, testing software entails providing a range of inputs and ensuring that the correct or expected output is produced.
The inputs can be provided manually, by code, by test script, and so forth. Regardless, the data for the inputs is created on an ad hoc basis for each piece of software to be tested. In other words, the tester has to create meaningful data for the different relevant inputs. The data also (hopefully) covers all possible problem points with the inputs and the associated manipulations thereof by the software code. This is an extraordinarily tedious and human-resource-intensive proposition that is repeated for virtually all of the new software code that is created.
Accordingly, there is a need for schemes and/or techniques that can address the above-described and other deficiencies in an efficient and/or uniform manner to e.g. facilitate the testing of software.